import pandas as pd
import matplotlib.pyplot as pt
'''
1. 请将数据导入pandas中，加上列名，如下图所示
'''
data = pd.read_table("./log.txt", header=None, names=['id','api','count','res_time_sum','res_time_min','res_time_max','res_time_avg','interval','created_at'])

'''
2. 检测是否有重复值 
'''
print(data['api'].describe())
print(data.interval.unique())
'''
3. 检测是否有异常值
'''
print(data['api'].describe())

'''
4. 分析api和interval这两列的数据是否对分析有用，如果无用，说明为什么后将这两列丢弃
'''
# api 值都是一样的 /front-api/bill/create
# interval 值都是一样的 60
data = data.drop('api', axis = 1)
data = data.drop('interval', axis = 1)

'''
5. 使用created_at这一列的数据作为时间索引
'''
data.index = pd.to_datetime(data.created_at)

'''
6. 分析api调用次数情况，例如，在一天中，哪些时间是访问高峰，
哪些时间段访问比较,如图 所示，从凌晨2点到11点访问少，业务高峰出在现下午两三点，晚上八九点 
'''
df2 = data['2019-5-1']
df2 = df2[['count']].resample('1H').mean()
df2['count'].plot()
pt.show()

'''
7. 分析一天中api响应时间，如下图所示，可以看到在业务高峰时间段，最大响应时间和平均 响应时间都有所上升
'''

new = data['2019-05-01'].resample('20T').mean()
new[['res_time_sum', 'res_time_min', 'res_time_max', 'res_time_avg']].plot()
pt.show()

'''
8. 分析连续的几天数据，可以发现，每天的业务高峰时段都比较相似
'''

data['2019-05-01':'2019-05-10']['count'].plot()
pt.show()

'''
9. 分析周末访问量是否有增加。如下图，可以发现，周末的下午和晚上，比非周末访问量多 一些
'''
data['weekday'] = data.index.weekday
data['weekend'] = data['weekday'].isin({5,6})
data.groupby(['weekend', data.index.hour])['count'].mean().unstack(level=0).plot()
pt.show()

